// 基本数据类型
package main

import "fmt"

func main1() {
	//bool类型，只有两个值：true 和 false
	//定义变量 bool布尔类型的定义与int,string都是GO语言中的基本数据类型
	var b1 bool
	var b2 bool
	b1 = true
	b2 = false
	//f 格式化输出 %d 整数  %s 字符串 %p内存地址  %T 类型 %t bool值
	fmt.Printf("b1 = %T, %t\n", b1, b1)
	fmt.Printf("b2 = %T, %t\n", b2, b2)

	var a int = 1
	b := 2
	if a > b {
		fmt.Println("a是大于b的")
		//……
	} else {
		fmt.Println("a是小于b的")
	}

	//bool类型的默认值是false， 规定是 false 0 ，true = 1
	var b3 bool
	fmt.Println(b3)
}
func main2() {
	//数字类型
	//每个数字类型都有一种范围
	//计算机之只能存放固定大小的值
	//我们在定义了这个类型的时候，系统给我们一个空间
	var num int = 9223370236854775807
	fmt.Println(num)

	var i int8 //（-128 - 256）
	i = -128
	fmt.Println(i)
	/*i = 1000
	fmt.Println(i)*/

	//有现在的系统的空间都很大，默认都使用int64 即是int

	//以前的操作系统，内存是十分小， kb mb 对u了空间的要求是能省则省
	//1024kb 21256kb
	//以前的开发人员还有现在的开发一些硬件的人，在卡法中会考虑一个空间的问题

	// >0 无符号的数+ 有符号的数 + -
	var i2 uint8 //范围（0-255）
	i2 = 255
	fmt.Println(i2)

	/*
		有符号数和无符号数的区别
		1.	0为分解，政府推进……空间大小，空间大小是根据未来判断的 int 8 16 32 64
		  	0 + 空间大小
		2.了解二进制基本原理
	*/
}
func main3() {
	//浮点数 float,默认是 float64 ,32
	//浮点数是不精确的，计算机底层导致的0 1，浮点数，附属，没有办法做到精确计算
	var f1 float64
	f1 = 3.14
	var f2 float32
	f2 = 5.12
	fmt.Printf("%T,%f\n", f1, f1)
	fmt.Printf("%T,%f\n", f2, f2)
	//通过打印我们可以看到，默认的float类型，都保留了6位小数

	fmt.Println(f1, f2)
	fmt.Printf("%T,%.2f\n", f1, f1)
	fmt.Printf("%T,%.2f\n", f1, f1)
	//格式化输出，.n是保留了n位小数，其余类推

	//结论：
	//1. 使用float来计算，可能会导致数据不精确、
	//2. float64的精度 > float32，go语言中，浮点数默认使用的是float64

	//规定：在通常情况下，关于浮点数，默认就是使用float64
}

// byte
func main() {
	//byte = uint8  (0-255)之间的整数，我们通常用byte来定义
	var num1 byte = 255
	fmt.Println(num1)
	fmt.Printf("%T\n", num1)
	//这个时候我们打印的时候我们会发现了打印的是uint8 而不是byte
	//但是byte的别名就是uint8,但是这个别名是十分常用的

	//一个不常用的数据类型rune
	var num2 rune = 1000000000
	//所以最大的是就是10位数，那么就是等同于 int32
	fmt.Println(num2)
	fmt.Printf("%T\n", num2)

	//int 一般根据操作系统的位数来进行默认，如果你是64位的操作系统，那么int默认为int64
	//如果你是32位的操作系统，那么int默认为int32
} /*
| 序号 | 类型和描述                                                   |
| :--- | :----------------------------------------------------------- |
| 1    | **uint8** 无符号 8 位整型 (0 到 255)                         |
| 2    | **uint16** 无符号 16 位整型 (0 到 65535)                     |
| 3    | **uint32** 无符号 32 位整型 (0 到 4294967295)                |
| 4    | **uint64** 无符号 64 位整型 (0 到 18446744073709551615)      |
| 5    | **int8** 有符号 8 位整型 (-128 到 127)  0                    |
| 6    | **int16** 有符号 16 位整型 (-32768 到 32767)                 |
| 7    | **int32** 有符号 32 位整型 (-2147483648 到 2147483647)       |
| 8    | **int64** 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807) |
*/
/*
1、有符号数和无符号数的区别
- 0为分解，正负推进.......空间大小   ，空间大小是根据位来判断的  int 8 16 32 64、二进制的位，这个数据类型值的上限
- 0 + 空间大小
*/
